package com.ibeeking.found.job.demoHandler;

import com.ibeeking.gmc.job.core.biz.model.ReturnT;
import com.ibeeking.gmc.job.core.handler.annotation.XxlJob;
import com.ibeeking.gmc.job.core.log.XxlJobLogger;
import com.ibeeking.gmc.job.core.util.ShardingUtil;
import org.springframework.stereotype.Component;

/**
 * XxlJob开发示例（Bean模式）
 * <p>
 * 开发步骤：
 * 1、在Spring Bean实例中，开发Job方法，方式格式要求为 "public ReturnT<String> execute(String param)"
 * 2、为Job方法添加注解 "@XxlJob(value="自定义jobhandler名称", init = "JobHandler初始化方法", destroy = "JobHandler销毁方法")"，注解value值对应的是调度中心新建任务的JobHandler属性的值。
 * 3、执行日志：需要通过 "XxlJobLogger.log" 打印执行日志；
 *
 * @author xuxueli 2019-12-11 21:52:51
 */
//@Component
public class DemoXxlJob {

    /**
     * 2、分片广播任务
     */
    @XxlJob("shardingJobDemoHandler")
    public ReturnT<String> shardingJobDemoHandler(String param) throws Exception {
        System.out.println("================="+param);
        /*
        * -- 其中count是分片总数，index是当前分片数
            select id,name
            from user
            where status=1 and mod(id,#{count})=#{index};
        * */

        // 分片参数
        ShardingUtil.ShardingVO shardingVO = ShardingUtil.getShardingVo();
        XxlJobLogger.log("分片参数：当前分片序号 = {}, 总分片数 = {}", shardingVO.getIndex(), shardingVO.getTotal());

        // 业务逻辑
        for (int i = 0; i < shardingVO.getTotal(); i++) {
            if (i == shardingVO.getIndex()) {
                XxlJobLogger.log("第 {} 片, 命中分片开始处理", i);
            } else {
                XxlJobLogger.log("第 {} 片, 忽略", i);
            }
        }

        return ReturnT.SUCCESS;
    }

}
